#include <semaphore.h>
#include <pthread.h>

typedef struct valoresCHS
{
	int cabezal;
	int cilindros;
	int sectores;
}chs;


typedef struct ClienteConocido {
	int socketCliente;
	struct ClienteConocido * Sgt;
	struct ClienteConocido * Ant;
}cliente ;



typedef struct ListaIDdescriptors 
{
	char sDescriptorID_delPedido[20];
	char discoAsignado[20];
	char sSocketPorElCualResponder[20];  
	int operacion;		
	int numeroSector;
	int estado;
	char data[512];
	int discosAEspejar;
	
	struct ListaIDdescriptors * Sgt;
	struct ListaIDdescriptors * Ant;
	
} __attribute__ ((packed)) pedido;



typedef struct DiscoConocido
{
	char sNombre[25];
	int Estado;
	int pendings;
	int iSocketHDAParaDA;			
	pedido * listaPedidos;
	pedido * listaPedidos_Ult;
	struct DiscoConocido * Sgt;
	struct DiscoConocido * Ant;
}disco;


typedef struct VecSincro
{
	disco* discoLect;
	disco* discoSinc;
	int sectoresRecibidos;
	int sectoresEnviados;
	int closeDiscoLect;
	int closeDiscoSinc;
	
}vecSincro;


typedef struct ListaPFS {
	int iSocket;
	int flag_cerrar;
	struct ListaPFS *Sgt;
	struct ListaPFS *Ant;
} listaPFS;

/*VARIABLES GLOBALES*/
pthread_mutex_t mutex;  
pthread_mutex_t mutex2;
pthread_mutex_t mutex3;   
pthread_mutex_t mutex4;
pedido * colaGlobal;
pedido * colaGlobal_Ult;
pedido * colaEspera;
pedido * colaEspera_Ult;
struct DiscoConocido * ListaDiscos;
struct DiscoConocido * ListaDiscos_Ult;
cliente * ListaClientes;
cliente * ListaClientes_Ult;
int iCantidadDeDAConectados;
int Estado;
int SubEstado;
int puertoFSS;
int puertoConex;
int sectoresTotales;
vecSincro VectorSincronizacion[10];
